Browser UseのWeb UIを使いながらAIエージェントの業務システムへの適用を考える

Browser UseのWeb UIを使いながらAIエージェントの業務システムへの適用を考える

はじめに

ブラウザ操作を自動化する「Browser-Use」は、Pythonコードから呼び出すことができるツールです。生成AIの機能を使って非常に簡単にWebサイトを操作することができます。今回は、この機能を更に簡単に利用するためのWeb UIが公式からリリースされましたので試してみます。動作確認をしながら業務システムへの適用も考えてみたいと思います。

セットアップ

Githubから必要なコードを取り出してセットアップを行います。

PC環境は以下です。
・macOS Sequoia 15.2

pip install --upgrade pip
pip install uv
uv venv --python 3.11
source .venv/bin/activate

git clone https://github.com/browser-use/web-ui.git
cd web-ui
uv pip install -r requirements.txt
uv pip install python-dotenv gradio
playwright install

とても簡単ですね。今回のセットアップでは、Web UIの機能追加のみならず、生成AIモデルの追加対応も実施されています。Pythonの環境周りは色々と困ることが多いので、システム環境ではなく分離環境でセットアップしても良いかもですね。また、環境変数周りの設定もしておきましょう。

# 既存の設定

# pythonの設定
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"

設定情報を再読み込みして有効にします。

source ~/.zshrc

Webサーバー起動時に読み込む環境設定ファイルを用意します。

cd ~/browser-use/web-ui/
vi .env

ブラウザの指定やAPIキーの指定を行います。リポジトリにコミットしないように.ignoreにいれておきましょう。

CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
CHROME_USER_DATA="~/Library/Application Support/Google/Chrome/Default"

ANONYMIZED_TELEMETRY=false

OPENAI_API_KEY=********
ANTHROPIC_API_KE=********

以下のコマンドでWebサーバーが起動します。

$ python webui.py --ip 127.0.0.1 --port 7788 

INFO     [browser_use] BrowserUse logging setup complete with level info
* Running on local URL:  http://127.0.0.1:7788

To create a public link, set `share=True` in `launch()`.

動作確認

先ほどWebサーバーが起動されましたので、Webブラウザから表示してみましょう。

http://127.0.0.1:7788

基本機能

6つのタブメニューについて順番に紹介します。

AIエージェントの設定

ScreenShot 2025-01-13 14.39.52

上から順番に説明します。Agent Typeは、標準とカスタム(機能拡張)があります。カスタムを指定します。Max Run Stepsは、実行する手順(ステップ)の最大数です。Max Actions per Stepは、1回の手順で複数の操作(アクション)をする最大数です。Use Visionは、テキスト読み取りだけではなく、画像読み取りによる認識をするか指定します。Use Tool Calls in Contentは、外部のAPI呼び出しを許可するか指定します。

言語モデルの設定

生成AIモデルを指定します。

ScreenShot 2025-01-13 14.40.59

かなり網羅されています。LLM Providerは、モデルの提供者を指定します。anthropic、openai、gemini、azure_openai、deepseek、ollamaが指定できます。Model Nameは、gpt-4oやclaude-3-5-sonnet-latestなどのモデル名を指定します。Temperatureは、表現の一貫性を指定します。数字が小さいと一貫性があり、数値が大きいと出力の多様性が増します。Base URLは、自社でモデルを運用している場合などURLを指定します。API Keyは接続に必要なセキュリティキー文字列を指定します。

今回のアップデートで、GoogleのGeminiや、Deepdeekが使えるようになったのは大きいですね。選択したモデルによっては、画像解析が使えなかったりします。また、モデルは頻繁にアップデートされますので、最新の情報を追ってください。

ブラウザの設定

ScreenShot 2025-01-13 14.25.46

Use Own Browserは、ユーザーがいつも利用しているブラウザを使用するか指定します。これを有効にすると、ログイン済みのアカウントのセッション情報を持ったまま利用することができます。標準では無効になっていて、セッション情報が一切ないChromiumブラウザが起動します。Keep Browser Openは、タスク実行が終わった後もブラウザを閉じないようにします。Headless Modeは、ブラウザをバックグラウンドで実行するか指定します。最初は無効にしてブラウザを起動して動作を確認したあと、定期的に自動時刻するようなタスクまで落とし込みができたらバックグラウンド実行すると良いと思います。Disable Securityは、ブラウザのセキュリティ機能を無効にします。Enable Recordingは、操作履歴の動画を撮影するか指定します。

エージェントの実行

ブラウザからエージェントに具体的な指示を指定します。

ScreenShot 2025-01-13 14.54.44

事項結果

エージェントの直近の動作結果がテキストで残ります。

Webサーバーのコンソールからは以下のようなテキストが出力されています。初期設定ではログレベルINFOのため、多くの情報がコンソールに出力されています。

INFO     [src.agent.custom_agent] 🚀 Starting task: 高校サッカーで優勝したチームは?
INFO     [src.agent.custom_agent] 
📍 Step 1
INFO     [src.agent.custom_agent] 🤷 Eval: Unknown - No previous actions to evaluate.
INFO     [src.agent.custom_agent] 🧠 New Memory: 
INFO     [src.agent.custom_agent] ⏳ Task Progress: 
INFO     [src.agent.custom_agent] 🤔 Thought: I need to search for the 高校サッカー (high school soccer) championship winner.
INFO     [src.agent.custom_agent] 🎯 Summary: Search for the recent winner of the Japanese high school soccer championship.
INFO     [src.agent.custom_agent] 🛠️  Action 1/1: {"search_google":{"query":"高校サッカー 優勝チーム 2025年"},"go_to_url":null,"go_back":null,"click_element":null,"input_text":null,"switch_tab":null,"open_tab":null,"extract_content":null,"done":null,"scroll_down":null,"scroll_up":null,"send_keys":null,"scroll_to_text":null,"get_dropdown_options":null,"select_dropdown_option":null,"copy_to_clipboard":null,"paste_from_clipboard":null}
INFO     [src.agent.custom_agent] 🧠 All Memory: 
INFO     [controller] 🔍  Searched for "高校サッカー 優勝チーム 2025年" in Google
INFO     [src.agent.custom_agent] 
📍 Step 2
INFO     [src.agent.custom_agent] ✅ Eval: Success - The search results page contains information about the 高校サッカー (high school soccer) championship winner.
INFO     [src.agent.custom_agent] 🧠 New Memory: 前橋育英高校が優勝しました。
INFO     [src.agent.custom_agent] ⏳ Task Progress: 1. Searched for the winner of 高校サッカー 2025年. 2. Found information about the winner, 前橋育英高校.
INFO     [src.agent.custom_agent] 🤔 Thought: I have found the information needed about the winner of the high school soccer championship, which is 前橋育英高校.
INFO     [src.agent.custom_agent] 🎯 Summary: The high school soccer championship winner is 前橋育英高校.
INFO     [src.agent.custom_agent] 🛠️  Action 1/1: {"search_google":null,"go_to_url":null,"go_back":null,"click_element":null,"input_text":null,"switch_tab":null,"open_tab":null,"extract_content":null,"done":{"text":"2025年の高校サッカー選手権大会で優勝したチームは前橋育英高校です。"},"scroll_down":null,"scroll_up":null,"send_keys":null,"scroll_to_text":null,"get_dropdown_options":null,"select_dropdown_option":null,"copy_to_clipboard":null,"paste_from_clipboard":null}
INFO     [src.agent.custom_agent] 🧠 All Memory: 前橋育英高校が優勝しました。

INFO     [src.agent.custom_agent] 📄 Result: 2025年の高校サッカー選手権大会で優勝したチームは前橋育英高校です。
INFO     [src.agent.custom_agent] ✅ Task completed successfully
INFO     [src.agent.custom_agent] Created GIF at agent_history.gif

Resultsタブでは以下のように結果が出力されました。
ScreenShot 2025-01-13 18.26.13

操作の録画

エージェントの動作結果が動画で残ります。過去の実行履歴が全て残ります。

セッション済みのWebブラウザを使って業務を自動化してみる

一次利用のChromiumブラウザではなく、日常利用しているログイン済みのChromeを指定することで、シングルサインオン済みのWebアプリなどの操作を行うことができます。動作については自己責任および企業ポリシーに従って行ってください。AIエージェントは新しい技術ですので、企業ポリシーがおいついていなかったり、様々な使用リスクがあります。リスクを軽減する方法は多数ありますが、世の中で知見が十分に行き渡っておらず、思っても見ない事故や漏洩等のセキュリティリスクが発生する可能性があります。まずは、十分に信頼できる生成AIのエンジンを使ってください。

カレンダーで予定を確認する

何度か以下のようなリクエストを送ってみた結果、3つの回答方法で予定の確認し始めました。

質問: 今週の予定を教えて

回答例1: 
1.Google検索で「今週の予定を確認するにはどうするか」検索をする
2.検索結果から「今週の予定を調べる手順」を作成する
3.作成された手順をリストにして英語で回答

1. Open the Google Calendar app on your Android device.
2. Tap the month name to move between months.
3. Select a date to view the schedule for that day.
4. Use the "Today" icon to return to the current date.
5. Switch views with the menu icon to see your schedule, with options like "Schedule" and "Month."

ScreenShot 2025-01-14 11.30.40

なかなかビターな味の回答ですねwww。人間がいかにハイコンテキストに会話しているか改めて理解できました。
では、同じ質問を改めて行ってみましょう。

質問: 今週の予定を教えて

回答例1: 
1.Googleカレンダーを表示する(ログイン済みの状態)
2.表示されたデフォルトの表示から予定を読み取る。
3.読み取った予定をリストにして表示

INFO     [src.agent.custom_agent] 📄 Result: 今週の予定は以下の通りです:

1月13日(月曜日):
- 08:00〜08:25: 送迎
- 08:30〜09:20: 家事/準備
- 09:30〜10:50: 移動

1月14日(火曜日):
- 同じ 8:00〜10:50
- 13:00〜13:30: 昼礼
- 14:00〜15:00: トレンドチェック勉強会202412-01
- 16:00〜16:40: マネジメントMTG(組織)

1月15日(水曜日):
- 同じ 8:00〜10:50
- 13:30〜15:30: サポート定例
- 15:30〜16:30: 1on1

1月16日(木曜日):
- 10:00〜11:00: 移動
- 11:00〜12:00: 確定【訪問】◎◎社

1月17日(金曜日):
- 09:30〜10:50: 移動
- 13:30〜14:00: 事業の確認会
INFO     [src.agent.custom_agent] ✅ Task completed successfully

今度はかなり正確に表示されました。ただ、これはブラウザに保存されたセッション情報がたまたま目的に沿っていたために正解となる情報を収集できたのだと思います。次は少し応用した質問をしてみます。

質問: 来月の予定を教えて

回答例1: 
1.Googleカレンダーを表示する(ログイン済みの状態)
2.表示されたデフォルトの表示から予定を読み取る。
3.読み取った予定をリストにして表示(ただし、2月の予定では無かったので言い訳を英語で表示)

- Various dates in February have different events and appointments.
- Days and associated activities are shown in detail for each weekday.
- Specific interactions can be accessed by selecting respective dates for more details.
INFO     [src.agent.custom_agent] ✅ Task completed successfully

参考訳
- 2月の様々な日付には、異なるイベントや予定が入っています。
- 平日ごとに、日付と関連する活動が詳細に表示されています。
- それぞれの日付を選択することで、具体的な予定内容を確認することができます。

やはりというか、たまたま表示された情報は1月第2週の情報だったのですが、翌月の2月に遷移する方法を画面から見つけることができずに調査終了してしまいました。

それでは、生成AIのモデルを切り替えて同じことをやってみましょう。

質問: 来月の予定を教えて

回答例1: 
1.Googleカレンダーを表示する(ログイン済みの状態)
2.表示されたデフォルトの表示から予定を読み取る。
3.リンクからカレンダー画面を遷移する
4.読み取った予定をリストにして表示(ただし、2月の予定では無かったので言い訳を英語で表示)

INFO     [src.agent.custom_agent] 📄 Result: 来月(2025年2月)の予定は以下の通りです:

1. 日常的な予定:
   - 平日の朝(8:00-8:25)に「送迎」の予定があります。
   - 平日の朝(8:30-9:20)に「家事/準備」の予定があります。
   - 平日の午前中(9:30-10:50)に「移動」の予定があります。

2. 定例会議:
   - 毎週火曜日(11:00-11:30)に「全体定例MTG」があります。
   - 毎週火曜日(13:00-13:30)に「全社昼礼」があります。

3. 特別な予定:
   - 2月4日(火):
     - 14:00-15:00 トレンドチェック勉強会
     - 16:00-16:40 マネジメントMTG(組織)
     - 16:45-18:00 マネジメントMTG(事業)
   - 2月5日(水):
     - 13:30-15:30 サポート定例
     - 14:00-14:50 MTG
     - 15:30-16:30 1on1
     - 18:00-20:20 懇親会
   - 2月6日(木):
     - 11:00-12:00  【訪問】◎◎社
     - 13:00-14:30 【来社】面談
   - 2月7日(金):
     - 13:30-14:00 事業確認

以上が来月の主な予定です。日常的な予定に加えて、いくつかの重要な会議や外部との面談が予定されています。
INFO     [src.agent.custom_agent] ✅ Task completed successfully

おぉー、かなり良い感じに収集できたように見えます。。。が、実際には、2月の一部予定のみ収集していて、肝心の日程を間違えている箇所があります。日常的な予定などはまとめてくれていて理解が進みますが、データとしては重複していても個別に欲しい場合があります。出力形式の指定をしたほうが良いかもしれませんね。

ちなみに、以下のように指示をしたら期待通りの回答を得られました。

質問:
2月1日から2月28日までの私の主な予定を教えて。
具体的には、Googleカレンダーを開いて、
2月1週目から2月最終週まで順番に週間カレンダー画面を移動して予定を読み取ってください。
補足:日本語で調べる。日本語で考える。日本語で出力する。

まとめ

今回は、Browser-Use の Web UI を使って、設定できる項目を確認してみました。特に、既存のセッション済みブラウザを指定できるのは、良くも悪くも強力な機能だと感じました。一方で、曖昧な指示をすると、勝手に解釈したり、検索に頼りきってしまったりして、想定どおりの回答を得られない場合がありました。やはり、人間はハイコンテキストな生き物ですね。AI エージェントは、どんな依頼でも頑張って答えようとしてくれますが、ときには大きく方向違いの回答をしてしまうこともあります。そのため、明確な指示が重要です。利用する業務アプリが決まっている場合は、ドメインを絞り込んだうえで、具体的な指示を行いましょう。コンテキスト情報を付加したり、出力形式を指定したり、分岐や困ったときの方針などを明記しておくと、AI エージェントは迷わずゴールに向かってくれるはずです。

余談になりますが、年末年始に AIエージェントを毎日触っていたところ、人間同士のやり取りについても振り返るきっかけになりました。AIエージェントへの指示では、人間への指示と同様に、ハイコンテキストにならず、背景や目的、役割や目標、具体的な手順、出力形式などを誰もが理解できるように示すことが大切だと感じています。また、仕事を受ける側は、AIエージェントと同様に、不明点があれば確認したり、細かい履歴を残したり、無限ループやフリーズを防ぐなど、プロアクティブに見える化を進めることで安心感につながると実感しました。今後もAIと対話しつつ、人間同士のコミュニケーションもより良くしていきたいですね。

参考資料

https://github.com/browser-use/web-ui

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.